package w83b.w83bOperacionesPaso.w83bCitaciones;

import java.util.HashMap;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import w83b.w83bBeans.W83bCitacionBean;
import w83b.w83bBeans.W83bPlantillasBean;
import w83b.w83bBeans.W83bUsuarioXLNetsBean;
import w83b.w83bUtilidades.W83bUtilidadesCitaciones;
import w83b.w83bUtilidades.W83bUtilidadesComunes;
import w83b.w83bUtilidades.W83bUtilidadesRTF;
import w83b.w83bUtilidadesComunes.W83bClsConstantes;
import es.ejie.frmk.presentacion.operacion.paso.Q70ActionPasoOP;
import es.ejie.frmk.presentacion.sesiondatos.Q70ContextoEJIE;

public class W83bCartasCitacionAction extends Q70ActionPasoOP{


	
	protected void processOP(Q70ContextoEJIE contexto, ActionErrors errores, ActionMapping mapping,
			ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		
	}

	protected ActionForward processForward(Q70ContextoEJIE contexto, ActionErrors errors, ActionMapping mapping, 
		ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		 HashMap txtMuniProv=(HashMap)contexto.get("w83bMapResultadosBean");
				 
		 HashMap plantillas=(HashMap)contexto.get("w83bPlantillasMap");
		W83bPlantillasBean plantilla=(W83bPlantillasBean)plantillas.get(W83bClsConstantes.CARTAS.toUpperCase());
		HashMap mapaPar = new HashMap();
		W83bCitacionBean citacion=(W83bCitacionBean)contexto.get("w83bCitacionDetalleBean");
		String idioma = (String)contexto.get(W83bClsConstantes.CONSTANTE_CONTEXTO_IDIOMA);
	    W83bUsuarioXLNetsBean usuario = (W83bUsuarioXLNetsBean)contexto.get(W83bClsConstantes.CONSTANTE_CONTEXTO_USUARIO);
	    HashMap datosDelDep=  W83bUtilidadesComunes.obtenerTitulosDelegacionDepartamento(usuario,idioma);
	    StringBuffer  tituloDelelegacionEu = (StringBuffer)datosDelDep.get("tituloDelelegacionEu");
		StringBuffer  tituloDelelegacionEs = (StringBuffer)datosDelDep.get("tituloDelelegacionEs");
		StringBuffer  tituloDepEu = (StringBuffer)datosDelDep.get("tituloDepEu");
		StringBuffer  tituloDepEs = (StringBuffer)datosDelDep.get("tituloDepEs");
		
		//se rellenan los datos que se van a repetir continuamente para no tener que rellenar por cada elemento
		
		HashMap mapaParGeneral = new HashMap();
		
		mapaParGeneral.put("<<DEPEUS>>",tituloDepEu.toString());
		mapaParGeneral.put("<<DEPCAS>>",tituloDepEs.toString());
		mapaParGeneral.put("<<DELEUS>>",tituloDelelegacionEu.toString());
		mapaParGeneral.put("<<DELCAS>>",tituloDelelegacionEs.toString());
		
		
			mapaPar.put("<<EXPDTE>>",citacion.getNacta().substring(1,citacion.getNacta().length()));
		
			mapaPar.put("<<finrep>>","");
			mapaPar.put("<<iniciorep>>","");
			CharSequence content=W83bUtilidadesRTF.leerTodoFichero(plantilla.getFichero());
			
			String contenido=content.toString();
			
			
			//calculo de coger el trozo que nos interesa repetir
			
			/*la idea es coger el contenido anterior al trozo a repetir le llamaremos "PREV" 
			/* el trozo a repetri "TROZO"
			 * y la parte trasera del contenido "POST"
			 * 
			 * Nuestro contenido final contentra "PREV" + n veces TROZO + "POST"
			 */
			StringBuffer contenidoBuffer=new StringBuffer(contenido);
			contenido=W83bUtilidadesRTF.sustituirCadenaCaracteresString(contenidoBuffer, mapaParGeneral).toString();
			
			int y=contenido.lastIndexOf("footer");
			int z=contenido.lastIndexOf("page");
			
			
			y=contenido.substring(y,contenido.length()).indexOf("}}")+2+y;
			
			z=contenido.substring(z,contenido.length()).indexOf("}")+1+z;
			
			String parteDelanteLimpia=contenido.substring(0,y);
			String parteAtrasLimpia=contenido.substring(z,contenido.length());
			contenidoBuffer=new StringBuffer(contenido.substring(y,z));
		
			
		StringBuffer datos=new StringBuffer();
		// se aņade la parte delantera del documento.
		datos.append(parteDelanteLimpia);
		int numElem=1;
		datos=W83bUtilidadesCitaciones.elementoCentroTrabajoMesaImpugnante(1,citacion,datos,contenidoBuffer,contenidoBuffer,mapaPar,numElem,idioma);
	
		datos=W83bUtilidadesCitaciones.elementoSindicatos(1,citacion,datos,contenidoBuffer,contenidoBuffer,mapaPar,numElem,txtMuniProv);
				
		//para que la ultima pagina no salga vacia quitamos el ultimo salto de pagina
		
		int i=datos.lastIndexOf("page");
		String delante=datos.substring(0,i);
		String detras=datos.substring(i,datos.length());
		String delanteL=delante.substring(0, delante.lastIndexOf("{"));
		String detrasL=detras.substring( detras.indexOf("}")+1,detras.length());
		datos=new StringBuffer(delanteL.concat(detrasL));
		
		
		
		//para cerrar el contenido del documento metemos la parte trasera.
		datos.append(parteAtrasLimpia);
		
        response.setContentType("application/msword");
        response.setContentLength(datos.toString().getBytes().length);
        response.setHeader("Content-disposition","attachment;filename="+plantilla.getNombrePlantilla().replaceAll("[.]","CITACION."));
        response.getOutputStream().write(datos.toString().getBytes());
        response.getOutputStream().flush();

		
		return null;
	}
	
		
}

